from typing import Dict
from .llm_registry import llm_registry

# 缓存已创建的实例
_llm_instances: Dict[str, object] = {}

def get_or_create_llm_instance(llm_type_name: str = None, reuse_existing: bool = True): # type: ignore
    """
    获取 LLM 实例（带缓存，避免重复加载模型）
    llm_type_name: LLM 类型名称
    reuse_existing: 是否重用已存在的实例
    这个函数可以被API调用。
    """
    # 如果已存在，直接返回
    if reuse_existing and llm_type_name in _llm_instances:
        return _llm_instances[llm_type_name]    
    # 否则创建并缓存
    cls = llm_registry.get(llm_type_name)
    if cls is None:
        print(f"[LLM] 未找到类型为 '{llm_type_name}' 的 LLM 类")
        return None

    old_instance = _llm_instances.get(llm_type_name)
    if hasattr(old_instance, "cleanup"):
        old_instance.cleanup() # type: ignore

    print(f"[LLM] 正在创建新实例: {llm_type_name}")
    instance = cls()
    _llm_instances[llm_type_name] = instance  # 缓存
    return instance

def get_available_llm_list():
    """
    获取所有已注册的LLM服务列表。
    这个函数可以被API调用。
    """
    return list(llm_registry.keys())
